#ifndef __MCD_RENDERADV_DX11_DX11BUFFERS__
#define __MCD_RENDERADV_DX11_DX11BUFFERS__

#include "../ShareLib.h"
#include "Dx11IncludeFwd.h"

namespace MCD
{

	class MCD_RENDERADV_API Dx11Buffers
	{
	public:
		/*! Create a vertex buffer which allows:
			- gpu read / write
			- non dynamic usage (i.e. dynamic writing may be heavy)
			- cpu write only
 		*/
		static ID3D11Buffer* createVertexDefault(size_t sizeInBytes, size_t stride);

		/*! Create a vertex buffer which allows:
			- gpu read / write
			- dynamic usage (i.e. dynamic writing is less heavy)
			- cpu write only
 		*/
		static ID3D11Buffer* createVertexDynamic(size_t sizeInBytes, size_t stride);

		/*! Create a index buffer which allows:
			- gpu read / write
			- non dynamic usage (i.e. dynamic writing may be heavy)
			- cpu write only
 		*/
		static ID3D11Buffer* createIndexDefault(size_t sizeInBytes, size_t stride);

		/*! Create a index buffer which allows:
			- gpu read / write
			- dynamic usage (i.e. dynamic writing is less heavy)
			- cpu write only
 		*/
		static ID3D11Buffer* createIndexDynamic(size_t sizeInBytes, size_t stride);

		/*! Create a constant buffer
		*/
		static ID3D11Buffer* createConstant(size_t sizeInBytes);

		/*! Create a input layout object.
		*/
		static ID3D11InputLayout* createInputLayout(
			D3D11_INPUT_ELEMENT_DESC* elements,
			size_t elementCnt,
			ID3DBlob* shaderByteCode
			);

	};	// Dx11Buffers

}	// namespace MCD

#endif	// __MCD_RENDERADV_DX11_DX11BUFFERS__